package br.com.vti.sisp_sicrim.antigo.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.UUID;

import br.com.vti.sisp_sicrim.antigo.dao.util.HibernateUtil;

public class SicCadnovoDAO {

	private int codigoRetorno = 0; // *ERROR
	private String msgRetorno = ""; // *ERROR
	public long qtdRegistros = 0; // *counter
	public long nroRegistro = 0; // *counter
	private String[] listacol = { "", "TipoRg", "NumeroRg", "Uf", "NomePessoa", "NomePai", "NomeMae", "DataReg", "DataNasc", "MatriculaFuncAtu", "DataDocAtu", "HoraAtu", "Naturalidade", "CodigoNaturalidade", "OrgaoExpNaturalidade", "NacionEstrangeira", "DataUltimaMoviment", "PossuiProcesso", "Logradouro", "Numero", "Bairro", "Municipio", "Estado", "Cep", "Complemento", "Passaporte", "NumeroPosto" };
	private ResultSet query = null;

	public String insert(String pTipoRg, Long pNumeroRg, String pUf, String pNomePessoa, String pNomePai, String pNomeMae, Integer pDataReg, Integer pDataNasc, Integer pMatriculaFuncAtu, Integer pDataDocAtu, Integer pHoraAtu, String pNaturalidade, Integer pCodigoNaturalidade, String pOrgaoExpNaturalidade, Integer pNacionEstrangeira, String pDataUltimaMoviment, String pPossuiProcesso, String pLogradouro, Integer pNumero, String pBairro, Integer pMunicipio, String pEstado, Integer pCep, String pComplemento, String pPassaporte, Integer pNumeroPosto) {

		String sql = "{ ? = call sp_grava_Sic_Cadnovo ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ) }";
		UUID pId;
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {

			CallableStatement stp = HibernateUtil.getConnection().prepareCall(sql);
			stp.registerOutParameter(1, Types.OTHER);
			stp.setString(2, pTipoRg); // (getColuna("TipoRg")
			stp.setLong(3, pNumeroRg); // (getColuna("NumeroRg")
			stp.setString(4, pUf); // (getColuna("Uf")
			stp.setString(5, pNomePessoa); // (getColuna("NomePessoa")
			stp.setString(6, pNomePai); // (getColuna("NomePai")
			stp.setString(7, pNomeMae); // (getColuna("NomeMae")
			stp.setInt(8, pDataReg); // (getColuna("DataReg")
			stp.setInt(9, pDataNasc); // (getColuna("DataNasc")
			stp.setInt(10, pMatriculaFuncAtu); // (getColuna("MatriculaFuncAtu")
			stp.setInt(11, pDataDocAtu); // (getColuna("DataDocAtu")
			stp.setInt(12, pHoraAtu); // (getColuna("HoraAtu")
			stp.setString(13, pNaturalidade); // (getColuna("Naturalidade")
			stp.setInt(14, pCodigoNaturalidade); // (getColuna("CodigoNaturalidade")
			stp.setString(15, pOrgaoExpNaturalidade); // (getColuna("OrgaoExpNaturalidade")
			stp.setInt(16, pNacionEstrangeira); // (getColuna("NacionEstrangeira")
			stp.setString(17, pDataUltimaMoviment); // (getColuna("DataUltimaMoviment")
			stp.setString(18, pPossuiProcesso); // (getColuna("PossuiProcesso")
			stp.setString(19, pLogradouro); // (getColuna("Logradouro")
			stp.setInt(20, pNumero); // (getColuna("Numero")
			stp.setString(21, pBairro); // (getColuna("Bairro")
			stp.setInt(22, pMunicipio); // (getColuna("Municipio")
			stp.setString(23, pEstado); // (getColuna("Estado")
			stp.setInt(24, pCep); // (getColuna("Cep")
			stp.setString(25, pComplemento); // (getColuna("Complemento")
			stp.setString(26, pPassaporte); // (getColuna("Passaporte")
			stp.setInt(27, pNumeroPosto); // (getColuna("NumeroPosto")
			// execute SP
			stp.execute();
			pId = (UUID) stp.getObject(1);
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			return null;
		}
		return String.valueOf(pId);
	}

	public void update(String pId, String pTipoRg, Long pNumeroRg, String pUf, String pNomePessoa, String pNomePai, String pNomeMae, Integer pDataReg, Integer pDataNasc, Integer pMatriculaFuncAtu, Integer pDataDocAtu, Integer pHoraAtu, String pNaturalidade, Integer pCodigoNaturalidade, String pOrgaoExpNaturalidade, Integer pNacionEstrangeira, String pDataUltimaMoviment, String pPossuiProcesso, String pLogradouro, Integer pNumero, String pBairro, Integer pMunicipio, String pEstado, Integer pCep, String pComplemento, String pPassaporte, Integer pNumeroPosto) {

		String sql = "{ call sp_atualiza_Sic_Cadnovo ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ) }";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {

			CallableStatement stp = HibernateUtil.getConnection().prepareCall(sql);
			stp.setObject(1, UUID.fromString(pId)); // getColuna("Id")
			stp.setString(2, pTipoRg); // getColuna("TipoRg")
			stp.setLong(3, pNumeroRg); // getColuna("NumeroRg")
			stp.setString(4, pUf); // getColuna("Uf")
			stp.setString(5, pNomePessoa); // getColuna("NomePessoa")
			stp.setString(6, pNomePai); // getColuna("NomePai")
			stp.setString(7, pNomeMae); // getColuna("NomeMae")
			stp.setInt(8, pDataReg); // getColuna("DataReg")
			stp.setInt(9, pDataNasc); // getColuna("DataNasc")
			stp.setInt(10, pMatriculaFuncAtu); // getColuna("MatriculaFuncAtu")
			stp.setInt(11, pDataDocAtu); // getColuna("DataDocAtu")
			stp.setInt(12, pHoraAtu); // getColuna("HoraAtu")
			stp.setString(13, pNaturalidade); // getColuna("Naturalidade")
			stp.setInt(14, pCodigoNaturalidade); // getColuna("CodigoNaturalidade")
			stp.setString(15, pOrgaoExpNaturalidade); // getColuna("OrgaoExpNaturalidade")
			stp.setInt(16, pNacionEstrangeira); // getColuna("NacionEstrangeira")
			stp.setString(17, pDataUltimaMoviment); // getColuna("DataUltimaMoviment")
			stp.setString(18, pPossuiProcesso); // getColuna("PossuiProcesso")
			stp.setString(19, pLogradouro); // getColuna("Logradouro")
			stp.setInt(20, pNumero); // getColuna("Numero")
			stp.setString(21, pBairro); // getColuna("Bairro")
			stp.setInt(22, pMunicipio); // getColuna("Municipio")
			stp.setString(23, pEstado); // getColuna("Estado")
			stp.setInt(24, pCep); // getColuna("Cep")
			stp.setString(25, pComplemento); // getColuna("Complemento")
			stp.setString(26, pPassaporte); // getColuna("Passaporte")
			stp.setInt(27, pNumeroPosto); // getColuna("NumeroPosto")
			// execute SP
			stp.execute();
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}
	}

	public void delete(String pId) {

		String sql = "{ call sp_exclui_Sic_Cadnovo ( ? ) }";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {

			CallableStatement stp = HibernateUtil.getConnection().prepareCall(sql);
			stp.setObject(1, UUID.fromString(pId)); // getColuna("Id")
			// execute SP
			stp.execute();
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}
	}

	public ResultSet selectNumeroRg(Long pNumeroRg) {

		String sql = "select * from sp_consNumeroRg_Sic_Cadnovo (";
		sql = sql + "pNumeroRg := '" + String.valueOf(pNumeroRg) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet readDataRegin(long pDataReg1, long pDataReg2) {

		String sql = "select * from sp_leDataRegFaixa_Sic_Cadnovo (";
		sql = sql + "pDataReg1 := '" + String.valueOf(pDataReg1) + "',";
		sql = sql + "pDataReg2 := '" + String.valueOf(pDataReg2) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet findTipoRgasc(String pTipoRg) {

		String sql = "select * from sp_pesqTipoRgClas_Sic_Cadnovo (";
		sql = sql + "pTipoRg := '" + pTipoRg + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet pesquisaProximo() {
		// query
		try {
			if (query == null)
				return null;
			if (query.getRow() == 0) {
				query = null;
				return null;
			}
			query.next();
			if (query.getRow() == 0) {
				query = null;
				return null;
			}
			if (query != null) {
				nroRegistro++;
			}
			return query;
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			return null;
		}
	}

	public boolean temProximo() {
		try {
			if (query == null)
				return false;
			if (query.getRow() == 0) {
				return false;
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			return false;
		}
		return (nroRegistro < qtdRegistros);
	}

	public void fecha() {
		if (query == null)
			return;
		try {
			query.close();
			query = null;
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			query = null;
		}
	}

	public int getColuna(String coluna) {
		for (int i = 0; i < listacol.length; i++) {
			if (listacol[i].equals(coluna))
				return i;
		}
		return -1;
	}

}
